#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Neo4j知识图谱问答功能演示
Demo script for Neo4j Knowledge Graph QA functionality
"""

import os
import sys
import logging

# 添加项目根目录到Python路径
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)

# 设置日志
logging.basicConfig(level=logging.WARNING)  # 减少日志输出

def demo_neo4j_qa():
    """演示Neo4j知识图谱问答功能"""
    
    print("=== 医疗问答系统 - Neo4j知识图谱功能演示 ===\n")
    
    try:
        # 导入医疗模型
        from api.models.medical_model import MedicalQAModel
        
        print("1. 初始化医疗问答模型...")
        # 创建模型实例，启用Neo4j功能（如果可用）
        model: MedicalQAModel = MedicalQAModel(use_deep_learning=False, use_neo4j=True)
        
        # 显示模型状态
        stats = model.get_model_stats()
        print(f"   - Neo4j功能: {'启用' if stats.get('use_neo4j') else '禁用'}")
        print(f"   - 深度学习功能: {'启用' if stats.get('use_deep_learning') else '禁用'}")
        print(f"   - 疾病数据: {stats.get('diseases_count', 0)} 种")
        print(f"   - 科室数据: {stats.get('departments_count', 0)} 个")
        
        print("\n2. 演示不同类型的医疗问答...")
        
        # 测试问题集
        demo_questions: list[dict[str, str]] = [
            # 疾病症状查询
            {
                "question": "感冒有什么症状？",
                "description": "疾病症状查询 - 从知识图谱中查询疾病的症状信息"
            },
            # 症状对应疾病查询
            {
                "question": "发热可能是什么病？", 
                "description": "症状诊断查询 - 根据症状查询可能的疾病"
            },
            # 疾病治疗查询
            {
                "question": "感冒怎么治疗？",
                "description": "疾病治疗查询 - 查询疾病的治疗方法和药物"
            },
            # 科室推荐查询
            {
                "question": "胃痛应该挂什么科？",
                "description": "科室推荐查询 - 根据症状推荐就诊科室"
            },
            # 一般医疗咨询
            {
                "question": "高血压需要注意什么？",
                "description": "综合医疗咨询 - 疾病相关的综合信息"
            }
        ]
        
        for i, item in enumerate(demo_questions, 1):
            question = item["question"]
            description = item["description"]
            
            print(f"\n{i}. {description}")
            print(f"   问题: {question}")
            
            try:
                # 生成答案
                result = model.generate_answer(question)
                
                answer = result.get('answer', '未能生成答案')
                source = result.get('source', 'unknown')
                score = result.get('score', 0.0)
                
                print(f"   答案: {answer}")
                print(f"   来源: {source}")
                print(f"   评分: {score:.2f}")
                
            except Exception as e:
                print(f"   错误: {str(e)}")
        
        print("\n3. 功能特点说明:")
        print("   ✓ 智能问题类型识别")
        print("   ✓ 多层次答案生成策略:")
        if stats.get('use_deep_learning'):
            print("     - 优先级1: 深度学习模型")
        if stats.get('use_neo4j'):
            print("     - 优先级2: Neo4j知识图谱")
        print("     - 优先级3: 基础知识库")
        print("   ✓ 上下文感知的医疗回答")
        print("   ✓ 安全的医疗建议生成")
        
        if not stats.get('use_neo4j'):
            print("\n⚠️  注意:")
            print("   Neo4j功能当前未启用，可能是因为:")
            print("   - Neo4j服务未运行")
            print("   - 数据库连接配置问题")
            print("   - 数据库未初始化")
            print("   系统将使用基础知识库提供服务")
        
        print("\n4. 如何启用完整的Neo4j功能:")
        print("   - 确保Neo4j数据库服务正在运行")
        print("   - 运行数据库初始化脚本: python scripts/init_database.py --init")
        print("   - 检查api/config/database.py中的连接配置")
        
        return True
        
    except Exception as e:
        print(f"演示失败: {str(e)}")
        import traceback
        traceback.print_exc()
        return False

def main():
    """主函数"""
    success = demo_neo4j_qa()
    
    if success:
        print("\n🎉 Neo4j知识图谱问答功能演示完成!")
        print("\n如需了解更多功能，请参考:")
        print("- README.md: 项目整体介绍")
        print("- README_DATABASE.md: 数据库相关文档") 
        print("- tests/test_neo4j_qa.py: 功能测试脚本")
    else:
        print("\n❌ 演示过程中出现问题")
    
    return success

if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)